# -*- coding: utf-8 -*-
import plotly.graph_objects as go
import numpy as np
import pandas as pd
import plotly.express as px

# 步骤 3.1: 创建简单的 3D 散点图

# 创建数据
x = np.random.randn(100)
y = np.random.randn(100)
z = np.random.randn(100)

# 创建 3D 散点图
fig = go.Figure(data=[go.Scatter3d(
x=x,
y=y,
z=z,
mode='markers', # 使用散点
marker=dict(
size=5,
color=z, # 根据 z 值为点着色
colorscale='Viridis', # 使用Viridis色彩地图
opacity=0.8
)
)])

# 更新布局
fig.update_layout(
title="3D Scatter Plot",
scene=dict(
xaxis_title='X Axis',
yaxis_title='Y Axis',
zaxis_title='Z Axis'
)
)

# 显示图表
fig.show()


# 步骤 3.2: 创建 3D 表面图

# 创建一个 3D 网格
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
x, y = np.meshgrid(x, y)
z = np.sin(np.sqrt(x**2 + y**2))

# 创建 3D 表面图
fig_surface = go.Figure(data=[go.Surface(z=z, x=x, y=y)])

# 更新布局
fig_surface.update_layout(
title="3D Surface Plot",
scene=dict(
xaxis_title='X Axis',
yaxis_title='Y Axis',
zaxis_title='Z Axis'
)
)

# 显示图表
fig_surface.show()


# 步骤 3.3: 创建折线图和散点图

# 创建一个 DataFrame
data = {
'X': [1, 2, 3, 4, 5],
'Y': [10, 11, 12, 13, 14],
'Z': [20, 19, 18, 17, 16]
}
df = pd.DataFrame(data)

# 创建一个折线图
fig_line = px.line(df, x='X', y='Y', title="Line Plot")
fig_line.show()

# 创建一个散点图
fig_scatter = px.scatter(df, x='X', y='Z', title="Scatter Plot")
fig_scatter.show()
